﻿//-----------------------------------------------------------------------
// <copyright company="www.3WayWebdesign.de">
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
//
// <author>Michael Morbach</author>
// <email>Michael@3waywebdesign.de</email>
// <web>http://www.3waywebdesign.de</web>
//-----------------------------------------------------------------------

namespace Tww.IBAN.IBANUtilities.Constants
{
    #region Imports

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Tww.IBAN.IBANUtilities.Model;


    #endregion

    public class CountryCodes
    {
        /// Countrystructures for IBAN
        /// Also see : http://www.pruefziffernberechnung.de/I/IBAN.shtml
        /// c = countrycode | p = checksumcode | b = bankcode | r = branchcode | a = accountnumbercode | i = other Functions
        private static List<IBANCountryModel> countryIBANStructes = new List<IBANCountryModel>()
        {
            new IBANCountryModel( "al", "ccpp bbbr rrri aaaa aaaa aaaa aaaa"),
            new IBANCountryModel( "ad", "ccpp bbbb rrrr aaaa aaaa aaaa"),
            new IBANCountryModel( "az", "ccpp bbbb aaaa aaaa aaaa aaaa aaaa"),
            new IBANCountryModel( "bh", "ccpp bbbb aaaa aaaa aaaa aa"),
            new IBANCountryModel( "be", "ccpp bbba aaaa aaii"),
            new IBANCountryModel( "be", "ccpp bbba aaaa aaii"),
            new IBANCountryModel( "ba", "ccpp bbbr rraa aaaa aaii"),
            new IBANCountryModel( "br", "ccpp bbbb bbbb rrrr raaa aaaa aaaa a"),
            new IBANCountryModel( "bg", "ccpp bbbb rrrr ddaa aaaa aa"),
            new IBANCountryModel( "cr", "ccpp bbba aaaa aaaa aaaa a"),
            new IBANCountryModel( "dk", "ccpp bbbb aaaa aaaa ai"),
            new IBANCountryModel( "de", "ccpp bbbb bbbb aaaa aaaa aa"),
            new IBANCountryModel( "do", "ccpp bbbb aaaa aaaa aaaa aaaa aaaa"),
            new IBANCountryModel( "ee", "ccpp bbaa aaaa aaaa aaai"),
            new IBANCountryModel( "fo", "ccpp bbbb aaaa aaaa ai"),
            new IBANCountryModel( "fi", "ccpp bbbb bbaa aaaa ai"),
            new IBANCountryModel( "fr", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "gf", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "pf", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "tf", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "ge", "ccpp bbaa aaaa aaaa aaaa aa"),
            new IBANCountryModel( "gi", "ccpp bbbb aaaa aaaa aaaa aaa"),
            new IBANCountryModel( "gr", "ccpp bbbr rrra aaaa aaaa aaaa aaa"),
            new IBANCountryModel( "gl", "ccpp bbbb aaaa aaaa ai"),
            new IBANCountryModel( "gp", "ccpp bbbb brrr rsaa aaaa aaaa aii"),
            new IBANCountryModel( "gt", "ccpp bbbb aaaa aaaa aaaa aaaa aaaa"),
            new IBANCountryModel( "hk", "ccpp bbbb aaaa aaaa"),
            new IBANCountryModel( "ie", "ccpp bbbb rrrr rraa aaaa aa"),
            new IBANCountryModel( "is", "ccpp bbbb rraa aaaa iiii iiii ii"),
            new IBANCountryModel( "il", "ccpp bbbr rraa aaaa aaaa aaa"),
            new IBANCountryModel( "it", "ccpp ibbb bbrr rrra aaaa aaaa aaa"),
            new IBANCountryModel( "vg", "ccpp bbbb aaaa aaaa aaaa aaaa"),
            new IBANCountryModel( "kz", "ccpp bbba aaaa aaaa aaaa"),
            new IBANCountryModel( "hr", "ccpp bbbb bbba aaaa aaaa a"),
            new IBANCountryModel( "kw", "ccpp bbbb aaaa aaaa aaaa aaaa aaaa aa"),
            new IBANCountryModel( "lv", "ccpp bbbb aaaa aaaa aaaa a"),
            new IBANCountryModel( "lb", "ccpp bbbb aaaa aaaa aaaa aaaa aaaa"),
            new IBANCountryModel( "li", "ccpp bbbb baaa aaaa aaaa a"),
            new IBANCountryModel( "lt", "ccpp bbbb baaa aaaa aaaa"),
            new IBANCountryModel( "lu", "ccpp bbba aaaa aaaa aaaa"),
            new IBANCountryModel( "mt", "ccpp bbbb rrrr raaa aaaa aaaa aaaa aaa"),
            new IBANCountryModel( "ma", "ccpp bbba aaaa aaaa aaaa aaii"),
            new IBANCountryModel( "mq", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "mr", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "mu", "ccpp bbbb bbrr aaaa aaaa aaaa aaai ii"),
            new IBANCountryModel( "yt", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "mk", "ccpp bbba aaaa aaaa aii"),
            new IBANCountryModel( "md", "ccpp bbaa aaaa aaaa aaaa aaaa"),
            new IBANCountryModel( "mc", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "me", "ccpp bbba aaaa aaaa aaaa ii"),
            new IBANCountryModel( "nc", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "nl", "ccpp bbbb aaaa aaaa aa"),
            new IBANCountryModel( "no", "ccpp bbbb aaaa aai"),
            new IBANCountryModel( "at", "ccpp bbbb baaa aaaa aaaa"),
            new IBANCountryModel( "pk", "ccpp bbbb rraa aaaa aaaa aaaa"),
            new IBANCountryModel( "ps", "ccpp bbbb rrrr rrrr raaa aaaa aaaa a"),
            new IBANCountryModel( "pl", "ccpp bbbr rrri aaaa aaaa aaaa aaaa"),
            new IBANCountryModel( "pt", "ccpp bbbb rrrr aaaa aaaa aaai i"),
            new IBANCountryModel( "ro", "ccpp bbbb aaaa aaaa aaaa aaaa"),
            new IBANCountryModel( "re", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "bl", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "mf", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "sm", "ccpp ibbb bbrr rrra aaaa aaaa aaa"),
            new IBANCountryModel( "sa", "ccpp bbaa aaaa aaaa aaaa aaaa"),
            new IBANCountryModel( "se", "ccpp bbba aaaa aaaa aaaa aaai"),
            new IBANCountryModel( "ch", "ccpp bbbb baaa aaaa aaaa a"),
            new IBANCountryModel( "rs", "ccpp bbba aaaa aaaa aaaa ii"),
            new IBANCountryModel( "sk", "ccpp bbbb rrrr rraa aaaa aaaa"),
            new IBANCountryModel( "si", "ccpp bbrr raaa aaaa aii"),
            new IBANCountryModel( "es", "ccpp bbbb rrrr iiaa aaaa aaaa"),
            new IBANCountryModel( "pm", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "cz", "ccpp bbbb aaaa aaaa aaaa aaaa"),
            new IBANCountryModel( "tn", "ccpp bbrr raaa aaaa aaaa aaii"),
            new IBANCountryModel( "tr", "ccpp bbbb braa aaaa aaaa aaaa aa"),
            new IBANCountryModel( "hu", "ccpp bbbr rrri aaaa aaaa aaaa aaai"),
            new IBANCountryModel( "ae", "ccpp bbba aaaa aaaa aaaa aaa"),
            new IBANCountryModel( "gb", "ccpp bbbb rrrr rraa aaaa aa"),
            new IBANCountryModel( "wf", "ccpp bbbb brrr rraa aaaa aaaa aii"),
            new IBANCountryModel( "cy", "ccpp bbbr rrrr aaaa aaaa aaaa aaaa"),
        };

        /// <summary>
        /// <para>Gets the Countrystructes</para>
        /// <para>c = countrycode | p = checksumcode | b = bankcode | r = branchcode | a = accountnumbercode | i = identifactionCode | t = typecode </para>
        /// </summary>
        public static List<IBANCountryModel> CountryIBANStructes { get { return countryIBANStructes; } }
    }
}
